[レポート]AWS IoT x SORACOMインテグレーション Deep Dive – SORACOM Technology Camp 2020 #SORACOM
2020年11月に開催されたイベント「SORACOM Technology Camp 2020」で行われた以下のセッションに参加しましたのでレポートしたいと思います。
セッション情報
概要
AWS IoTはIoTデバイスの管理や、送信されてくるデータをクラウド上で取り扱うための様々な機能を提供してくれており、SORACOMのお客様にも多数のユーザーがいらっしゃいます。今日、SORACOMとAWS IoTを接続するためのアプローチの選択肢は多数あります。 本セッションでは、皆様ご自身がアプリケーションの設計時に適切なインテグレーションを選択するためのガイドラインや考え方をお話しします。
スピーカー
亀田 治伸 様
アマゾン ウェブ サービス ジャパン株式会社
シニアエバンジェリスト
小梁川 貴史 様
株式会社ソラコム
ソリューションアーキテクト
- AWSのIoT系サービスを分類すると上記のように3つに分けることができます。
- このセッションでは「真ん中」の部分について話します。
- 「AWS IoT Core」、「AWS IoT Device Defender」、「AWS IoT Device Management」
AWS IoT Core
- 今日の本題のIoT Core
- デバイス認証やパケットの中身をみてLambdaを起動したりするルールエンジンなど、コアとなるサービス
プロトコルと認証認可
- Identity Service
- MQTTの場合は証明書一択になる。
- アプリの場合はSigV4やカスタム認証
- Thing
- 個別のデバイスのこと
- Thingレジストリ。デバイスレジストリということもある
- ポリシー
- デバイスの権限定義
- 証明書とセットで利用
- 1つの証明書に複数のデバイスで使うこともできるが証明書漏洩のリスクを考慮するとお勧めしない
- MQTT,MQTT over WebSocket, HTTPS
- 一般的にはMQTT。リッチな環境ならHTTPS
認証情報の管理
- 証明書を単にストレージに保存すればいいというものではない
- TPMチップとか車で使われるハードウェアセキュリティモジュール(耐タンパー性を持ったもの)に保存
- エッジのデバイスに証明書を組み込むと運用が始まった後で簡単には変えられない
- 証明書のアクティベート方式
- ユーザがアクティベートする、工場でアクティベートするなどいろんな方式
- 簡単に行うにはSORACOM Airでやる方法も。
MQTTブローカーとしてのAWS IoT Core
- IoT CoreはMQTTパブサブで通信できる。
- IoTでよく使われる形式。
- クライアントはブローカーとやり取りできればいい。
- メッセージを受け取る側の台数や状態などは知らなくていい。
- MQTTトピック。チャネルみたいなもの。
- トピックに対してPublish, Subscribeする
- フィルタリング可能
- サポートするQoS
- AWS IoT COreは「QoS=2」はサポートしていない
- 要件で必要でない限り「QoS=0」を利用
ルールエンジン
- 送られてきたデータに対してSQLを発行できる
- (センサーが)赤色というデータだとAWSの特定のサービスを起動する、など。
- 単一のパケットにのみ利用できる
- 過去データに対しては無理
デバイスシャドウ
- デバイスの状態の取得と保存ができる
- これを利用してデバイスを操作することができる
Device Management
- グルーピングして管理、一括でプロビジョニングしたりできる。
- より複雑な管理ができる
ジョブ
- ファームウェアアップデートの実施に使ったりすることができる
- 継続的に実行することも可能
- グループに登録されているデバイスに対してジョブを実行できる
セキュアトンネリング
- 多くの市販ルータでSSHのincomingは遮断している
- AWSが用意しているトンネルサービスを使ってファイアウォールを超えてデバイスにアクセスできる
Device Defender
- 変な挙動をしてないか、証明書の期限切れなどを検出
- 異常の検出
- TCP接続の確立回数
- ユーザーがデバイスで「脱獄」しようとすると異常を検知 など
- Device Managementと連動して、ファクトリーリセットをかけたりできる
小梁川様セッション
ここでSORACOM小梁川様にバトンタッチとなります。
SORACOMのAWS IoT活用パターン
- 上記3パターン
- SIM 通信のみで AWS IoT と通信
- Beam で AWS IoT と通信
- Funnel で AWS IoT と通信
- 通信としてSIM使うだけのパターン
- 証明書やプロトコル対応はユーザー側で全部やる
- ソラコムで証明証を使ってセキュアに通信するパターン
- Beamの利用
- デバイス側はMQTTで送ればOK
- サブスクライバーとしても問題無く利用できる
- 電源取れないケースがある
- バッテリー消費を気にする
- データ送るだけでいいならFunnelがハマるパターンも
SORACOM Beamの通信
- BeamのエンドポイントにMQTTセッションを張る
- MQTTSへセキュリティアップグレードが行われる
- 逆もしかりMQTTで受け取れる
- Beamに対してIoT Coreの情報を設定
- クライアントにはBeamのエンドポイントを指定
- HTTP/TCP/UDPも同様
- MQTTは常時接続が前提
- プロトコルとしてKeep Aliveが標準で実装されてる
- SORACOMとの認証はSIMが行う
- AWS IoTのデバイス証明書をBeamに登録できる
- デバイスはMQTTなどでデータ送信して、BeamでMQTTSに変換して AWS IoT に接続
- デバイスにパワーがないような場合でもソラコムに処理をオフロードできる
SORACOM Krypton
- 鍵発行を代行してデバイスに返す
- AWS IoTの鍵を発行してデバイスに返却して直接AWS IoTにMQTTS接続
- SIMの抜き出し対策
- IMEIロック機能
- IMSIとIMEIのセットで確認
- 指定のIMEI以外のモジュールにSIMを挿しても通信できない
質疑応答
- AWS IoT Device SDK for Python v2 を使ってsoracom Beam を介したPub/Subはできますでしょうか? v1だとうまくできたのですが、v2ではスクリプトが変わり実行できません。(認証の部分がネストされており、うまく切り離すことができません. 事例などあれば教えてほしいです)
- 該当部分を書き換えるなどしないと使えないかもしれません。
- 海外からの利用も可能でしょうか?
- AWS IoTは可能。
- グローバルSIMを提供しているので試してみてほしい。(利用できない国や地域もある)
- AWS IoT をAmazon社内で使っている事例はございますか?
- アマゾン社内ではAVS(Alexa Voice Service)で使われている。
- AWS IoTに興味があります。SORACOMの使用も踏まえた形で、復習するために適した情報が得られるサイト・書籍ありましたら教えて下さい。
- Black Beltやハンズオン資料などがオススメ
- SORACOMはドキュメントや書籍の公式ガイドなどがあります
- WiFiでMQTTするとき、WiFiで暗号化しているのにMQTT内でも暗号化する意味はあるのでしょうか
- Wifiはアクセスポイントまでの間の暗号化。そこから先の話はまた別となります。
- E2Eで考えておく必要があります。
- セキュアなリモートアクセスであれば、SORACOM Napterもあると思いますが、AWS IoTを使用するメリットデメリットがあれば教えてください、
- ソラコムに機能を寄せるならNapterも選択肢になる。
- ユースケース次第
最後に
AWSと組み合わせると更に深みが出ると感じるセッションでした。今後も「AWS x SORACOM」を組み合わせたノウハウをガンガン貯めていきたいなと思いました。
また、AWS との組み合わせで、個別のユースケースや機能などに焦点を絞ったDeepな内容も今後聞いてみたいなと思いました。
以上です。